export {}

/**
  对象类型
  - TS 的对象类型，其实就是描述对象中的 属性 方法 的类型，因为对象是由属性和方法组成的。
 */
// 1. 空对象
// let obj: {} = {}

// 2. 有属性和方法，一行书写多个属性 ; 分隔
// let obj2: {name: string; age: number, sing(): void} = {
//   name: '张三',
//   age: 18,
//   sing(){
//     console.log(this.name + '在唱歌'); 
//   }
// }



// 3. 换行写可以省略 ; 符号
// let obj2: {
//   name: string;
//   age: number;
//   sing(): void;
// } = {
//   name: '张三',
//   age: 18,
//   sing(){
//     console.log(this.name + '在唱歌'); 
//   }
// }


// obj2 = {
//   name: '德华',
//   age: 60,
//   sing(){}
// }

// console.log(obj2);


// 4. 扩展用法
// 4.1 函数使用箭头函数类型
// let obj2: {
//   name: string;
//   age: number;
//   sing: (name: string)=>void
// } = {
//   name: '张三',
//   age: 18,
//   sing(name: string){
//     console.log(this.name + '在唱歌'); 
//   }
// }

// 4.2 对象属性可选
// axios({url: 'xxxx', method: 'post'}) 如果是get请求, method可以忽略
// const axios = (config: {url: string; method?: string})=>{}

// axios({
//   url: 'xxxx'
// })

// axios({
//   url: 'xxxx',
//   method: 'post'
// })

// 4.3 使用类型别名
// type MyConfig = {url: string; data: string; method?: string}
// const axios = (config: MyConfig)=>{}

// axios({
//   url: 'xxxx',
//   data: 'xxxx'
// })

// axios({
//   url: 'xxxx',
//   data: 'xxxx',
//   method: 'POST'
// })

/**
 练习
 - 创建一个学生对象，该对象中具有以下属性和方法：
 - 属性：
   必选属性：姓名、性别、成绩，
   可选属性：身高
 - 方法：学习、打游戏（可选）
 */

 let stu: {
  name: string;
  gender: string;
  score: number;
  height?: number;
  study: ()=>void;
  game?: ()=>void
 } = {
   name: '张三',
   gender: '男',
   score: 100,
   height: 175,
   study(){
    console.log('我爱学习');
   },
   game(){
    console.log('我不爱打游戏');
   }
 }

 stu = {
   name: '张三',
   gender: '男',
   score: 100,
  //  height: 175,
   study(){
    console.log('我爱学习');
   },
  //  game(){
  //   console.log('我不爱打游戏'); 
  //  }
 }

